<?php

declare(strict_types=1);

namespace App\Job;

use App\Dao\AdminLogDao;
use Hyperf\AsyncQueue\Job;

use App\Utils\ServerUtil;
use Exception;
use App\Utils\Excel;
use PhpOffice\PhpSpreadsheet\Spreadsheet;

class ExcelJob extends Job
{
    public $params;

    public function __construct($params)
    {
        // 这里最好是普通数据，不要使用携带 IO 的对象，比如 PDO 对象
        $this->params = $params;
    }
 
    /**
     * @Author czm
     * @DateTime 2020-05-20
     * @return void
     */
    public function handle()
    {
        // 根据参数处理具体逻辑
        try{
            switch($this->params['scene']){
                case 'order': //订单导出
                    $filename=$this->params['unquieName'];
                    $head=['id'=>'id','name'=>'122132'];   
                    // $data=[
                    //     ['id'=>1,'name'=>'测试']
                    // ];
                    //导出内容二维数组
                    $files=[];
                    // $before = memory_get_usage(); 
                    for($j=0;$j<3;$j++){
                        for($i=0;$i<1000;$i++){
                            $data[]=['id'=>$i,'name'=>'测试'.$j];
                        }
                        // $after = memory_get_usage(); 
                        $files[]=Excel::create($head,$data)->save(); 
                        unset($data);
                        // var_dump('job我的大小: '.$before."  ".$after." 差值 ".($after - $before));
                    }
                    Excel::zipFiles($filename,$files);
                break;
            }
            make(AdminLogDao::class)->addLog('excel队列已完成:'.$this->params['scene']);
        }catch(\Throwable $t){
            ServerUtil::info('excel队列',['param'=>$this->params,'res'=>$t->getMessage()]);
        }
    }

}